home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / dev / gg / ncurses-5.3.lha / ncurses-5.3 / include / form.h < prev    next >
C/C++ Source or Header  |  2002-10-24  |  17KB  |  385 lines

  1. /****************************************************************************
  2.  * Copyright (c) 1998,2000 Free Software Foundation, Inc.                   *
  3.  *                                                                          *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a  *
  5.  * copy of this software and associated documentation files (the            *
  6.  * "Software"), to deal in the Software without restriction, including      *
  7.  * without limitation the rights to use, copy, modify, merge, publish,      *
  8.  * distribute, distribute with modifications, sublicense, and/or sell       *
  9.  * copies of the Software, and to permit persons to whom the Software is    *
  10.  * furnished to do so, subject to the following conditions:                 *
  11.  *                                                                          *
  12.  * The above copyright notice and this permission notice shall be included  *
  13.  * in all copies or substantial portions of the Software.                   *
  14.  *                                                                          *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
  16.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
  17.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
  18.  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
  19.  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
  20.  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
  21.  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
  22.  *                                                                          *
  23.  * Except as contained in this notice, the name(s) of the above copyright   *
  24.  * holders shall not be used in advertising or otherwise to promote the     *
  25.  * sale, use or other dealings in this Software without prior written       *
  26.  * authorization.                                                           *
  27.  ****************************************************************************/
  28.  
  29. /****************************************************************************
  30.  *   Author:  Juergen Pfeifer, 1995,1997                                    *
  31.  *   Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en             *
  32.  ****************************************************************************/
  33.  
  34. #ifndef FORM_H
  35. #define FORM_H
  36.  
  37. #include <curses.h>
  38. #include <eti.h>
  39.  
  40. #ifdef __cplusplus
  41.   extern "C" {
  42. #endif
  43.  
  44. typedef int Form_Options;
  45. typedef int Field_Options;
  46.  
  47.     /**********
  48.     *  _PAGE  *
  49.     **********/
  50.  
  51. typedef struct {
  52.   short    pmin;      /* index of first field on page            */
  53.   short    pmax;      /* index of last field on page             */
  54.   short    smin;      /* index of top leftmost field on page     */
  55.   short    smax;      /* index of bottom rightmost field on page */
  56. } _PAGE;
  57.  
  58.     /**********
  59.     *  FIELD  *
  60.     **********/
  61.  
  62. typedef struct fieldnode {
  63.   unsigned short           status;      /* flags                */
  64.   short            rows;      /* size in rows        */
  65.   short            cols;      /* size in cols        */
  66.   short            frow;      /* first row                */
  67.   short            fcol;      /* first col                */
  68.   int                   drows;    /* dynamic rows               */
  69.   int                   dcols;    /* dynamic cols               */
  70.   int                   maxgrow;  /* maximum field growth       */
  71.   int            nrow;      /* offscreen rows            */
  72.   short            nbuf;      /* additional buffers            */
  73.   short            just;      /* justification            */
  74.   short            page;      /* page on form        */
  75.   short            index;      /* into form -> field            */
  76.   int            pad;      /* pad character            */
  77.   chtype        fore;      /* foreground attribute    */
  78.   chtype        back;      /* background attribute    */
  79.   Field_Options        opts;      /* options                */
  80.   struct fieldnode *    snext;      /* sorted order pointer    */
  81.   struct fieldnode *    sprev;      /* sorted order pointer    */
  82.   struct fieldnode *    link;      /* linked field chain            */
  83.   struct formnode *    form;      /* containing form            */
  84.   struct typenode *    type;      /* field type                */
  85.   void *        arg;      /* argument for type            */
  86.   char *        buf;      /* field buffers            */
  87.   void *        usrptr;      /* user pointer        */
  88. } FIELD;
  89.  
  90.     /**************
  91.     *  FIELDTYPE  *
  92.     **************/
  93.  
  94. typedef struct typenode {
  95.   unsigned short    status;                   /* flags               */
  96.   long            ref;                   /* reference count      */
  97.   struct typenode *    left;                   /* ptr to operand for | */
  98.   struct typenode *    right;                   /* ptr to operand for | */
  99.  
  100.   void* (*makearg)(va_list *);                 /* make fieldtype arg   */
  101.   void* (*copyarg)(const void *);              /* copy fieldtype arg   */
  102.   void  (*freearg)(void *);                    /* free fieldtype arg   */
  103.  
  104.   bool    (*fcheck)(FIELD *,const void *);       /* field validation     */
  105.   bool    (*ccheck)(int,const void *);           /* character validation */
  106.  
  107.   bool    (*next)(FIELD *,const void *);         /* enumerate next value */
  108.   bool    (*prev)(FIELD *,const void *);         /* enumerate prev value */
  109.  
  110. } FIELDTYPE;
  111.  
  112.     /*********
  113.     *  FORM  *
  114.     *********/
  115.  
  116. typedef struct formnode {
  117.   unsigned short    status;      /* flags                */
  118.   short            rows;      /* size in rows        */
  119.   short            cols;      /* size in cols        */
  120.   int            currow;      /* current row in field window*/
  121.   int            curcol;      /* current col in field window*/
  122.   int            toprow;      /* in scrollable field window    */
  123.   int                   begincol; /* in horiz. scrollable field */
  124.   short            maxfield; /* number of fields            */
  125.   short            maxpage;  /* number of pages            */
  126.   short            curpage;  /* index into page            */
  127.   Form_Options        opts;      /* options                */
  128.   WINDOW *        win;      /* window                */
  129.   WINDOW *        sub;      /* subwindow                */
  130.   WINDOW *        w;      /* window for current field    */
  131.   FIELD **        field;      /* field [maxfield]            */
  132.   FIELD *        current;  /* current field            */
  133.   _PAGE *        page;      /* page [maxpage]            */
  134.   void *        usrptr;      /* user pointer        */
  135.  
  136.   void                  (*forminit)(struct formnode *);
  137.   void                  (*formterm)(struct formnode *);
  138.   void                  (*fieldinit)(struct formnode *);
  139.   void                  (*fieldterm)(struct formnode *);
  140.  
  141. } FORM;
  142.  
  143. typedef void (*Form_Hook)(FORM *);
  144.  
  145.     /***************************
  146.     *  miscellaneous #defines  *
  147.     ***************************/
  148.  
  149. /* field justification */
  150. #define NO_JUSTIFICATION    (0)
  151. #define JUSTIFY_LEFT        (1)
  152. #define JUSTIFY_CENTER        (2)
  153. #define JUSTIFY_RIGHT        (3)
  154.  
  155. /* field options */
  156. #define O_VISIBLE        (0x0001)
  157. #define O_ACTIVE        (0x0002)
  158. #define O_PUBLIC        (0x0004)
  159. #define O_EDIT            (0x0008)
  160. #define O_WRAP            (0x0010)
  161. #define O_BLANK            (0x0020)
  162. #define O_AUTOSKIP        (0x0040)
  163. #define O_NULLOK        (0x0080)
  164. #define O_PASSOK        (0x0100)
  165. #define O_STATIC                (0x0200)
  166.  
  167. /* form options */
  168. #define O_NL_OVERLOAD        (0x0001)
  169. #define O_BS_OVERLOAD        (0x0002)
  170.  
  171. /* form driver commands */
  172. #define REQ_NEXT_PAGE     (KEY_MAX + 1)    /* move to next page        */
  173. #define REQ_PREV_PAGE     (KEY_MAX + 2)    /* move to previous page    */
  174. #define REQ_FIRST_PAGE     (KEY_MAX + 3)    /* move to first page        */
  175. #define REQ_LAST_PAGE     (KEY_MAX + 4)    /* move to last page        */
  176.  
  177. #define REQ_NEXT_FIELD     (KEY_MAX + 5)    /* move to next field        */
  178. #define REQ_PREV_FIELD     (KEY_MAX + 6)    /* move to previous field    */
  179. #define REQ_FIRST_FIELD     (KEY_MAX + 7)    /* move to first field        */
  180. #define REQ_LAST_FIELD     (KEY_MAX + 8)    /* move to last field        */
  181. #define REQ_SNEXT_FIELD     (KEY_MAX + 9)    /* move to sorted next field    */
  182. #define REQ_SPREV_FIELD     (KEY_MAX + 10)    /* move to sorted prev field    */
  183. #define REQ_SFIRST_FIELD (KEY_MAX + 11)    /* move to sorted first field    */
  184. #define REQ_SLAST_FIELD     (KEY_MAX + 12)    /* move to sorted last field    */
  185. #define REQ_LEFT_FIELD     (KEY_MAX + 13)    /* move to left to field    */
  186. #define REQ_RIGHT_FIELD     (KEY_MAX + 14)    /* move to right to field    */
  187. #define REQ_UP_FIELD     (KEY_MAX + 15)    /* move to up to field        */
  188. #define REQ_DOWN_FIELD     (KEY_MAX + 16)    /* move to down to field    */
  189.  
  190. #define REQ_NEXT_CHAR     (KEY_MAX + 17)    /* move to next char in field    */
  191. #define REQ_PREV_CHAR     (KEY_MAX + 18)    /* move to prev char in field    */
  192. #define REQ_NEXT_LINE     (KEY_MAX + 19)    /* move to next line in field    */
  193. #define REQ_PREV_LINE     (KEY_MAX + 20)    /* move to prev line in field    */
  194. #define REQ_NEXT_WORD     (KEY_MAX + 21)    /* move to next word in field    */
  195. #define REQ_PREV_WORD     (KEY_MAX + 22)    /* move to prev word in field    */
  196. #define REQ_BEG_FIELD     (KEY_MAX + 23)    /* move to first char in field    */
  197. #define REQ_END_FIELD     (KEY_MAX + 24)    /* move after last char in fld    */
  198. #define REQ_BEG_LINE     (KEY_MAX + 25)    /* move to beginning of line    */
  199. #define REQ_END_LINE     (KEY_MAX + 26)    /* move after last char in line    */
  200. #define REQ_LEFT_CHAR     (KEY_MAX + 27)    /* move left in field        */
  201. #define REQ_RIGHT_CHAR     (KEY_MAX + 28)    /* move right in field        */
  202. #define REQ_UP_CHAR     (KEY_MAX + 29)    /* move up in field        */
  203. #define REQ_DOWN_CHAR     (KEY_MAX + 30)    /* move down in field        */
  204.  
  205. #define REQ_NEW_LINE     (KEY_MAX + 31)    /* insert/overlay new line    */
  206. #define REQ_INS_CHAR     (KEY_MAX + 32)    /* insert blank char at cursor    */
  207. #define REQ_INS_LINE     (KEY_MAX + 33)    /* insert blank line at cursor    */
  208. #define REQ_DEL_CHAR     (KEY_MAX + 34)    /* delete char at cursor    */
  209. #define REQ_DEL_PREV     (KEY_MAX + 35)    /* delete char before cursor    */
  210. #define REQ_DEL_LINE     (KEY_MAX + 36)    /* delete line at cursor    */
  211. #define REQ_DEL_WORD     (KEY_MAX + 37)    /* delete line at cursor    */
  212. #define REQ_CLR_EOL     (KEY_MAX + 38)    /* clear to end of line        */
  213. #define REQ_CLR_EOF     (KEY_MAX + 39)    /* clear to end of field    */
  214. #define REQ_CLR_FIELD     (KEY_MAX + 40)    /* clear entire field        */
  215. #define REQ_OVL_MODE     (KEY_MAX + 41)    /* begin overlay mode        */
  216. #define REQ_INS_MODE     (KEY_MAX + 42)    /* begin insert mode        */
  217. #define REQ_SCR_FLINE     (KEY_MAX + 43)    /* scroll field forward a line    */
  218. #define REQ_SCR_BLINE     (KEY_MAX + 44)    /* scroll field backward a line    */
  219. #define REQ_SCR_FPAGE     (KEY_MAX + 45)    /* scroll field forward a page    */
  220. #define REQ_SCR_BPAGE     (KEY_MAX + 46)    /* scroll field backward a page    */
  221. #define REQ_SCR_FHPAGE   (KEY_MAX + 47) /* scroll field forward  half page */
  222. #define REQ_SCR_BHPAGE   (KEY_MAX + 48) /* scroll field backward half page */
  223. #define REQ_SCR_FCHAR    (KEY_MAX + 49) /* horizontal scroll char          */
  224. #define REQ_SCR_BCHAR    (KEY_MAX + 50) /* horizontal scroll char          */
  225. #define REQ_SCR_HFLINE   (KEY_MAX + 51) /* horizontal scroll line          */
  226. #define REQ_SCR_HBLINE   (KEY_MAX + 52) /* horizontal scroll line          */
  227. #define REQ_SCR_HFHALF   (KEY_MAX + 53) /* horizontal scroll half line     */
  228. #define REQ_SCR_HBHALF   (KEY_MAX + 54) /* horizontal scroll half line     */
  229.  
  230. #define REQ_VALIDATION     (KEY_MAX + 55)    /* validate field        */
  231. #define REQ_NEXT_CHOICE     (KEY_MAX + 56)    /* display next field choice    */
  232. #define REQ_PREV_CHOICE     (KEY_MAX + 57)    /* display prev field choice    */
  233.  
  234. #define MIN_FORM_COMMAND (KEY_MAX + 1)    /* used by form_driver        */
  235. #define MAX_FORM_COMMAND (KEY_MAX + 57)    /* used by form_driver        */
  236.  
  237. #if defined(MAX_COMMAND)
  238. #  if (MAX_FORM_COMMAND > MAX_COMMAND)
  239. #    error Something is wrong -- MAX_FORM_COMMAND is greater than MAX_COMMAND
  240. #  elif (MAX_COMMAND != (KEY_MAX + 128))
  241. #    error Something is wrong -- MAX_COMMAND is already inconsistently defined.
  242. #  endif
  243. #else
  244. #  define MAX_COMMAND (KEY_MAX + 128)
  245. #endif
  246.  
  247.     /*************************
  248.     *  standard field types  *
  249.     *************************/
  250. extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ALPHA;
  251. extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ALNUM;
  252. extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ENUM;
  253. extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_INTEGER;
  254. extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_NUMERIC;
  255. extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_REGEXP;
  256.  
  257.         /************************************
  258.     *  built-in additional field types  *
  259.         *  They are not defined in SVr4     *
  260.     ************************************/
  261. extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_IPV4;      /* Internet IP Version 4 address */
  262.  
  263.         /*********************** 
  264.         *   Default objects    *
  265.         ***********************/ 
  266. extern NCURSES_EXPORT_VAR(FORM *)    _nc_Default_Form;
  267. extern NCURSES_EXPORT_VAR(FIELD *)    _nc_Default_Field;
  268.  
  269.  
  270.     /***********************
  271.     *  FIELDTYPE routines  *
  272.     ***********************/
  273. extern NCURSES_EXPORT(FIELDTYPE *) new_fieldtype (
  274.             bool (* const field_check)(FIELD *,const void *),
  275.             bool (* const char_check)(int,const void *)),
  276.                 *link_fieldtype(FIELDTYPE *,FIELDTYPE *);
  277.  
  278. extern NCURSES_EXPORT(int)    free_fieldtype (FIELDTYPE *);
  279. extern NCURSES_EXPORT(int)    set_fieldtype_arg (FIELDTYPE *,
  280.             void * (* const make_arg)(va_list *),
  281.             void * (* const copy_arg)(const void *),
  282.             void (* const free_arg)(void *));
  283. extern NCURSES_EXPORT(int)     set_fieldtype_choice (FIELDTYPE *,
  284.             bool (* const next_choice)(FIELD *,const void *),
  285.                   bool (* const prev_choice)(FIELD *,const void *));
  286.  
  287.     /*******************
  288.     *  FIELD routines  *
  289.     *******************/
  290. extern NCURSES_EXPORT(FIELD *)    new_field (int,int,int,int,int,int);
  291. extern NCURSES_EXPORT(FIELD *)    dup_field (FIELD *,int,int);
  292. extern NCURSES_EXPORT(FIELD *)    link_field (FIELD *,int,int);
  293.  
  294. extern NCURSES_EXPORT(int)    free_field (FIELD *);
  295. extern NCURSES_EXPORT(int)    field_info (const FIELD *,int *,int *,int *,int *,int *,int *);
  296. extern NCURSES_EXPORT(int)    dynamic_field_info (const FIELD *,int *,int *,int *);
  297. extern NCURSES_EXPORT(int)    set_max_field ( FIELD *,int);
  298. extern NCURSES_EXPORT(int)    move_field (FIELD *,int,int);
  299. extern NCURSES_EXPORT(int)    set_field_type (FIELD *,FIELDTYPE *,...);
  300. extern NCURSES_EXPORT(int)    set_new_page (FIELD *,bool);
  301. extern NCURSES_EXPORT(int)    set_field_just (FIELD *,int);
  302. extern NCURSES_EXPORT(int)    field_just (const FIELD *);
  303. extern NCURSES_EXPORT(int)    set_field_fore (FIELD *,chtype);
  304. extern NCURSES_EXPORT(int)    set_field_back (FIELD *,chtype);
  305. extern NCURSES_EXPORT(int)    set_field_pad (FIELD *,int);
  306. extern NCURSES_EXPORT(int)    field_pad (const FIELD *);
  307. extern NCURSES_EXPORT(int)    set_field_buffer (FIELD *,int,const char *);
  308. extern NCURSES_EXPORT(int)    set_field_status (FIELD *,bool);
  309. extern NCURSES_EXPORT(int)    set_field_userptr (FIELD *, void *);
  310. extern NCURSES_EXPORT(int)    set_field_opts (FIELD *,Field_Options);
  311. extern NCURSES_EXPORT(int)    field_opts_on (FIELD *,Field_Options);
  312. extern NCURSES_EXPORT(int)    field_opts_off (FIELD *,Field_Options);
  313.  
  314. extern NCURSES_EXPORT(chtype)    field_fore (const FIELD *);
  315. extern NCURSES_EXPORT(chtype)    field_back (const FIELD *);
  316.  
  317. extern NCURSES_EXPORT(bool)    new_page (const FIELD *);
  318. extern NCURSES_EXPORT(bool)    field_status (const FIELD *);
  319.  
  320. extern NCURSES_EXPORT(void *)    field_arg (const FIELD *);
  321.  
  322. extern NCURSES_EXPORT(void *)    field_userptr (const FIELD *);
  323.  
  324. extern NCURSES_EXPORT(FIELDTYPE *)    field_type (const FIELD *);
  325.  
  326. extern NCURSES_EXPORT(char *)    field_buffer (const FIELD *,int);
  327.  
  328. extern NCURSES_EXPORT(Field_Options)    field_opts (const FIELD *); 
  329.  
  330.     /******************
  331.     *  FORM routines  *
  332.     ******************/
  333.  
  334. extern NCURSES_EXPORT(FORM *)    new_form (FIELD **);
  335.  
  336. extern NCURSES_EXPORT(FIELD **)    form_fields (const FORM *);
  337. extern NCURSES_EXPORT(FIELD *)    current_field (const FORM *);
  338.  
  339. extern NCURSES_EXPORT(WINDOW *)    form_win (const FORM *);
  340. extern NCURSES_EXPORT(WINDOW *)    form_sub (const FORM *);
  341.  
  342. extern NCURSES_EXPORT(Form_Hook)    form_init (const FORM *);
  343. extern NCURSES_EXPORT(Form_Hook)    form_term (const FORM *);
  344. extern NCURSES_EXPORT(Form_Hook)    field_init (const FORM *);
  345. extern NCURSES_EXPORT(Form_Hook)    field_term (const FORM *);
  346.  
  347. extern NCURSES_EXPORT(int)    free_form (FORM *);
  348. extern NCURSES_EXPORT(int)    set_form_fields (FORM *,FIELD **);
  349. extern NCURSES_EXPORT(int)    field_count (const FORM *);
  350. extern NCURSES_EXPORT(int)    set_form_win (FORM *,WINDOW *);
  351. extern NCURSES_EXPORT(int)    set_form_sub (FORM *,WINDOW *);
  352. extern NCURSES_EXPORT(int)    set_current_field (FORM *,FIELD *);
  353. extern NCURSES_EXPORT(int)    field_index (const FIELD *);
  354. extern NCURSES_EXPORT(int)    set_form_page (FORM *,int);
  355. extern NCURSES_EXPORT(int)    form_page (const FORM *);
  356. extern NCURSES_EXPORT(int)    scale_form (const FORM *,int *,int *);
  357. extern NCURSES_EXPORT(int)    set_form_init (FORM *,Form_Hook);
  358. extern NCURSES_EXPORT(int)    set_form_term (FORM *,Form_Hook);
  359. extern NCURSES_EXPORT(int)    set_field_init (FORM *,Form_Hook);
  360. extern NCURSES_EXPORT(int)    set_field_term (FORM *,Form_Hook);
  361. extern NCURSES_EXPORT(int)    post_form (FORM *);
  362. extern NCURSES_EXPORT(int)    unpost_form (FORM *);
  363. extern NCURSES_EXPORT(int)    pos_form_cursor (FORM *);
  364. extern NCURSES_EXPORT(int)    form_driver (FORM *,int);
  365. extern NCURSES_EXPORT(int)    set_form_userptr (FORM *,void *);
  366. extern NCURSES_EXPORT(int)    set_form_opts (FORM *,Form_Options);
  367. extern NCURSES_EXPORT(int)    form_opts_on (FORM *,Form_Options);
  368. extern NCURSES_EXPORT(int)    form_opts_off (FORM *,Form_Options);
  369. extern NCURSES_EXPORT(int)    form_request_by_name (const char *);
  370.  
  371. extern NCURSES_EXPORT(const char *)    form_request_name (int);
  372.  
  373. extern NCURSES_EXPORT(void *)    form_userptr (const FORM *);
  374.  
  375. extern NCURSES_EXPORT(Form_Options)    form_opts (const FORM *);
  376.  
  377. extern NCURSES_EXPORT(bool)    data_ahead (const FORM *);
  378. extern NCURSES_EXPORT(bool)    data_behind (const FORM *);
  379.  
  380. #ifdef __cplusplus
  381.   }
  382. #endif
  383.  
  384. #endif    /* FORM_H */
  385.